# open 打开文件
# r: 只读模式
# w: 只写模式，文件不存在则创建，会覆盖原有内容
# a: 追加模式，文件不存在则创建，会在文件末尾追加
# b: 以二进制模式打开，不能单独使用，需要和其他模式一起使用，比如: rb(二进制模式只读)
# +: 读写模式，不能单独使用，需要和其他模式一起使用，比如: a+

# path = "/Users/daxiang/Downloads/hydrogen.txt"
# file = open(path)
# print(file.readlines())
# file.close()


# os 模块和文件相关的常用的方法
import os
# print(os.getcwd())  # 返回当前文件在磁盘里的绝对路径
# print(os.listdir("/Users/daxiang/Downloads"))  # 列出指定文件夹下的所有文件
# print(os.rmdir("aa"))  # 删除指定文件夹
# print(os.removedirs("aa/bb/cc"))  # 删除指定的多级文件夹
# print(os.mkdir("aa"))  # 创建文件夹
# print(os.makedirs("aa/bb/cc"))  # 创建多级文件夹


# os.path
import os.path
# print(os.path.abspath("aa"))
# print(os.path.exists("fileOp.py"))  # 判断当前目下，指定文件存不存在
# print(os.path.exists("/Users/daxiang/Downloads/hydrogen.txt"))  # 判断当前目下，指定文件存不存在
# print(os.path.join("/Users/daxiang/Downloads", "fileOp.py"))   # 将路径和文件名进行拼接
# print(os.path.split("/Users/daxiang/Downloads/fileOp.py"))  # 将文件名和路径拆分开
# print(os.path.splitext("fileOp.py"))  # 将文件名和扩展名进行分离
# print(os.path.basename("/Users/daxiang/Downloads/hydrogen.txt"))  # 从文件的绝对路径中提取出带有扩展名的文件名
# print(os.path.dirname("/Users/daxiang/Downloads/hydrogen.txt"))  # 和basename相反，从文件的绝对路径中提取出不带文件名的目录路径
# print(os.path.isdir("/Users/daxiang/Downloads/hydrogen.txt"), os.path.isdir("/Users/daxiang/Downloads"))  # 判断是否是文件夹


# 练习: 列出工程下的所有python文件
path = os.getcwd()
father_path = os.path.dirname(path)  # 父级目录
grade_father_path = os.path.dirname(father_path)  # 两级父级目录
# print(path)
# print(father_path)
# print(grade_father_path)

# def loopPyFile(p):
#     if os.path.isdir(p):
#         files = os.listdir(p)
#         for file in files:
#             subpath = os.path.join(p, file)
#             loopPyFile(subpath)
#     else:
#         if p.endswith(".py"):
#             print(p)
#
# loopPyFile(father_path)


# os.walk() 会遍历当前目录下的所有文件及子目录中的所有文件
list_files = os.walk(father_path)
for i in list_files:
    print(i)
